package component;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;

import data.school.SchoolData;
import winapi251.app.schoolmeal.R;

/**
 * 급식표 액티비티
 */
public class MealTableActivity extends Activity
{
	private static final String LOG_TAG = "WASchoolMeal_component.MealTableActivity";

	// 학교데이터를 저장할 프리퍼런스의 이름
	private static final String SCHOOL_DATA_PREF_NAME = "SchoolData";

	// 액티비티 요청코드
	private static final int REQUEST_SCHOOL_SELECTION = 0; // 학교선택 요청코드

	// 급식표를 불러올 학교에 대한 정보
	private SchoolData schoolData;

	/**
	 * 급식표 액티비티가 생성될 때 호출되는 메서드
	 * @param savedInstanceState : 저장되어 있던 인스턴스 상태
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_meal_table);

		// 단말기에 저장된 학교데이터를 읽어온다.
		readSchoolDataFromPreference();

		// 저장된 학교데이터가 없으면
		if (schoolData == null)
		{
			// 학교선택 액티비티를 띄운다.
			startSchoolSelectionActivity();
			return;
		}
	}

	/**
	 * 급식표 액티비티가 언제든지 죽을 수 있는 상태가 되기 직전에 호출되는 메서드
	 */
	@Override
	protected void onPause()
	{
		super.onPause();

		// 학교데이터를 단말기에 저장한다.
		saveSchoolDataToPreference();
	}

	/**
	 * 급식표 액티비티에 의해 실행됐던 액티비티가 결과를 반환했을 때 호출되는 메서드
	 * @param requestCode : 요청코드
	 * @param resultCode  : 결과코드
	 * @param data        : 액티비티가 반환한 값
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		// 어떤 액티비티인지 구분한다.
		switch (requestCode)
		{
		case REQUEST_SCHOOL_SELECTION: // 학교선택 액티비티
			// 결과가 어떠했는지 구분한다.
			switch (resultCode)
			{
			case SchoolSelectionActivity.RESULT_OK: // 사용자가 학교를 선택했다.
				// 학교데이터를 갱신한다.
				SchoolData newSchoolData = (SchoolData) data.getSerializableExtra(SchoolSelectionActivity.RESULT_DATA_NAME_SCHOOL_DATA);
				renewSchoolData(newSchoolData);
				break;

			case SchoolSelectionActivity.RESULT_CANCELED: // 사용자가 학교를 선택하지 않았다.
				// 기기에 저장된 학교데이터가 없으면
				if (schoolData == null)
					// 급식정보를 보여줄 학교가 없는 것이므로 애플리케이션을 종료한다.
					finish();
				break;
			}
			break;
		}
	}

	/**
	 * 학교선택 액티비티를 실행하는 메서드
	 */
	private void startSchoolSelectionActivity()
	{
		Intent intent = new Intent(this, SchoolSelectionActivity.class);
		startActivityForResult(intent, REQUEST_SCHOOL_SELECTION);
	}

	/**
	 * 학교데이터를 갱신하는 메서드
	 * @param newSchoolData : 새로운 학교데이터
	 */
	private void renewSchoolData(SchoolData newSchoolData)
	{
		schoolData = newSchoolData;

		// TODO 변경된 학교의 급식표를 받아온다.
	}

	/**
	 * 프리퍼런스로부터 학교데이터를 읽어오는 메서드
	 */
	public void readSchoolDataFromPreference()
	{
		SharedPreferences prefs = getSharedPreferences(SCHOOL_DATA_PREF_NAME, Context.MODE_PRIVATE);
		String          insttNm         = prefs.getString("insttNm"        , null); // 학교이름
		String          zipAdres        = prefs.getString("zipAdres"       , null); // 학교주소
		String          schulCode       = prefs.getString("schulCode"      , null); // 학교코드
		String          schulCrseScCode = prefs.getString("schulCrseScCode", null); // 학교계급
		String          schulKndScCode  = prefs.getString("schulKndScCode" , null); // 학교종류
		String          areaSite        = prefs.getString("areaSite"       , null); // 지역사이트
		SchoolData.Area area            = SchoolData.Area.fromString(areaSite);

		SchoolData readSchoolData = SchoolData.create(insttNm, zipAdres, schulCode, schulCrseScCode, schulKndScCode, area);
		renewSchoolData(readSchoolData);
	}

	/**
	 * 학교데이터를 프리퍼런스에 저장하는 메서드
	 */
	public void saveSchoolDataToPreference()
	{
		if (schoolData == null)
			return;

		SharedPreferences prefs = getSharedPreferences(SCHOOL_DATA_PREF_NAME, Context.MODE_PRIVATE);
		SharedPreferences.Editor editor = prefs.edit();
		editor.putString("insttNm"        , schoolData.insttNm        ); // 학교이름
		editor.putString("zipAdres"       , schoolData.zipAdres       ); // 학교주소
		editor.putString("schulCode"      , schoolData.schulCode      ); // 학교코드
		editor.putString("schulCrseScCode", schoolData.schulCrseScCode); // 학교계급
		editor.putString("schulKndScCode" , schoolData.schulKndScCode ); // 학교종류
		editor.putString("areaSite"       , schoolData.area.site      ); // 지역사이트
		editor.commit();
	}
}